/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package be;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author root : Zavaleta De la Cruz Yury Daniel
 * Copyright 2011 Zavaleta De la Cruz Yury Daniel

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

 */
@Entity
@Table(name = "PRENDA", catalog = "agropecuario", schema = "")
@NamedQueries({
    @NamedQuery(name = "Prenda.findAll", query = "SELECT p FROM Prenda p"),
    @NamedQuery(name = "Prenda.findByIdPrenda", query = "SELECT p FROM Prenda p WHERE p.idPrenda = :idPrenda"),
    @NamedQuery(name = "Prenda.findByNombrePrenda", query = "SELECT p FROM Prenda p WHERE p.nombrePrenda = :nombrePrenda"),
    @NamedQuery(name = "Prenda.findByFechaIngreso", query = "SELECT p FROM Prenda p WHERE p.fechaIngreso = :fechaIngreso")})
public class Prenda implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_PRENDA", nullable = false)
    private Integer idPrenda;
    @Basic(optional = false)
    @Column(name = "NOMBRE_PRENDA", nullable = false, length = 300)
    private String nombrePrenda;
    @Basic(optional = false)
    @Column(name = "FECHA_INGRESO", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaIngreso;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<DevolucionLima> devolucionLimaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<DetalleCambioPrenda> detalleCambioPrendaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda1", fetch = FetchType.LAZY)
    private List<DetalleCambioPrenda> detalleCambioPrendaList1;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private PrecioProducto precioProducto;
    @JoinColumn(name = "ID_MATERIAL_PRENDA", referencedColumnName = "ID_MATERIAL_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private MaterialPrenda materialPrenda;
    @JoinColumn(name = "ID_ESTADO_PRENDA", referencedColumnName = "ID_ESTADO_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private EstadoPrenda estadoPrenda;
    @JoinColumn(name = "ID_TALLA_PRENDA", referencedColumnName = "ID_TALLA_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TallaPrenda tallaPrenda;
    @JoinColumn(name = "ID_COLOR_PRENDA", referencedColumnName = "ID_COLOR_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private ColorPrenda colorPrenda;
    @JoinColumn(name = "ID_TIPO_PRENDA", referencedColumnName = "ID_TIPO_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoPrenda tipoPrenda;
    @JoinColumn(name = "ID_MODELO_PRENDA", referencedColumnName = "ID_MODELO_PRENDA", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private ModeloPrenda modeloPrenda;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<DetalleVentaPrenda> detalleVentaPrendaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<DetalleOrdenCompraProducto> detalleOrdenCompraProductoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<SalidaPrendaTienda> salidaPrendaTiendaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<StockPrendaTiendaOrigen> stockPrendaTiendaOrigenList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "prenda", fetch = FetchType.LAZY)
    private List<IngresoPrendaTienda> ingresoPrendaTiendaList;

    public Prenda() {
    }

    public Prenda(Integer idPrenda) {
        this.idPrenda = idPrenda;
    }

    public Prenda(Integer idPrenda, String nombrePrenda, Date fechaIngreso) {
        this.idPrenda = idPrenda;
        this.nombrePrenda = nombrePrenda;
        this.fechaIngreso = fechaIngreso;
    }

    public Integer getIdPrenda() {
        return idPrenda;
    }

    public void setIdPrenda(Integer idPrenda) {
        this.idPrenda = idPrenda;
    }

    public String getNombrePrenda() {
        return nombrePrenda;
    }

    public void setNombrePrenda(String nombrePrenda) {
        this.nombrePrenda = nombrePrenda;
    }

    public Date getFechaIngreso() {
        return fechaIngreso;
    }

    public void setFechaIngreso(Date fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public List<DevolucionLima> getDevolucionLimaList() {
        return devolucionLimaList;
    }

    public void setDevolucionLimaList(List<DevolucionLima> devolucionLimaList) {
        this.devolucionLimaList = devolucionLimaList;
    }

    public List<DetalleCambioPrenda> getDetalleCambioPrendaList() {
        return detalleCambioPrendaList;
    }

    public void setDetalleCambioPrendaList(List<DetalleCambioPrenda> detalleCambioPrendaList) {
        this.detalleCambioPrendaList = detalleCambioPrendaList;
    }

    public List<DetalleCambioPrenda> getDetalleCambioPrendaList1() {
        return detalleCambioPrendaList1;
    }

    public void setDetalleCambioPrendaList1(List<DetalleCambioPrenda> detalleCambioPrendaList1) {
        this.detalleCambioPrendaList1 = detalleCambioPrendaList1;
    }

    public PrecioProducto getPrecioProducto() {
        return precioProducto;
    }

    public void setPrecioProducto(PrecioProducto precioProducto) {
        this.precioProducto = precioProducto;
    }

    public MaterialPrenda getMaterialPrenda() {
        return materialPrenda;
    }

    public void setMaterialPrenda(MaterialPrenda materialPrenda) {
        this.materialPrenda = materialPrenda;
    }

    public EstadoPrenda getEstadoPrenda() {
        return estadoPrenda;
    }

    public void setEstadoPrenda(EstadoPrenda estadoPrenda) {
        this.estadoPrenda = estadoPrenda;
    }

    public TallaPrenda getTallaPrenda() {
        return tallaPrenda;
    }

    public void setTallaPrenda(TallaPrenda tallaPrenda) {
        this.tallaPrenda = tallaPrenda;
    }

    public ColorPrenda getColorPrenda() {
        return colorPrenda;
    }

    public void setColorPrenda(ColorPrenda colorPrenda) {
        this.colorPrenda = colorPrenda;
    }

    public TipoPrenda getTipoPrenda() {
        return tipoPrenda;
    }

    public void setTipoPrenda(TipoPrenda tipoPrenda) {
        this.tipoPrenda = tipoPrenda;
    }

    public ModeloPrenda getModeloPrenda() {
        return modeloPrenda;
    }

    public void setModeloPrenda(ModeloPrenda modeloPrenda) {
        this.modeloPrenda = modeloPrenda;
    }

    public List<DetalleVentaPrenda> getDetalleVentaPrendaList() {
        return detalleVentaPrendaList;
    }

    public void setDetalleVentaPrendaList(List<DetalleVentaPrenda> detalleVentaPrendaList) {
        this.detalleVentaPrendaList = detalleVentaPrendaList;
    }

    public List<DetalleOrdenCompraProducto> getDetalleOrdenCompraProductoList() {
        return detalleOrdenCompraProductoList;
    }

    public void setDetalleOrdenCompraProductoList(List<DetalleOrdenCompraProducto> detalleOrdenCompraProductoList) {
        this.detalleOrdenCompraProductoList = detalleOrdenCompraProductoList;
    }

    public List<SalidaPrendaTienda> getSalidaPrendaTiendaList() {
        return salidaPrendaTiendaList;
    }

    public void setSalidaPrendaTiendaList(List<SalidaPrendaTienda> salidaPrendaTiendaList) {
        this.salidaPrendaTiendaList = salidaPrendaTiendaList;
    }

    public List<StockPrendaTiendaOrigen> getStockPrendaTiendaOrigenList() {
        return stockPrendaTiendaOrigenList;
    }

    public void setStockPrendaTiendaOrigenList(List<StockPrendaTiendaOrigen> stockPrendaTiendaOrigenList) {
        this.stockPrendaTiendaOrigenList = stockPrendaTiendaOrigenList;
    }

    public List<IngresoPrendaTienda> getIngresoPrendaTiendaList() {
        return ingresoPrendaTiendaList;
    }

    public void setIngresoPrendaTiendaList(List<IngresoPrendaTienda> ingresoPrendaTiendaList) {
        this.ingresoPrendaTiendaList = ingresoPrendaTiendaList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPrenda != null ? idPrenda.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Prenda)) {
            return false;
        }
        Prenda other = (Prenda) object;
        if ((this.idPrenda == null && other.idPrenda != null) || (this.idPrenda != null && !this.idPrenda.equals(other.idPrenda))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "be.Prenda[idPrenda=" + idPrenda + "]";
    }

}
